using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Collections;
using ClickSocial.Framework;

namespace ClickSocial.Data
{
    public class EventoDal: BaseDal
    {
        public EventoDal(){table = "Evento";}

        #region Evento
        public IDataReader GetOne(long id)
        {
            IDataReader dr = null;
            try
            {
                dr = DB.ClickSocial.ExecuteReader("cs_evento_spGetOne", id);
            }
            catch (Exception ex)
            {
                Hashtable addInfo = new Hashtable();
                addInfo.Add("id", id.ToString());
                throw ExceptionManager.Handle(ex, "Error al recuperar una foto", addInfo);
            }
            return dr;
        }

        public IDataReader GetAllByFotografo(string userId)
        {
            IDataReader dr = null;
            try
            {
                dr = DB.ClickSocial.ExecuteReader("cs_evento_spGetAllByFotografo", userId);
            }
            catch (Exception ex)
            {
                Hashtable addInfo = new Hashtable();
                addInfo.Add("userId", userId);
                throw ExceptionManager.Handle(ex, "Error al recuperar eventos", addInfo);
            }
            return dr;
        }

        public IDataReader GetAll()
        {
            IDataReader dr = null;
            try
            {
                dr = DB.ClickSocial.ExecuteReader("cs_evento_spGetAll");
            }
            catch (Exception ex)
            {
                throw ExceptionManager.Handle(ex);
            }
            return dr;
        }

        public IDataReader GetAll(int visibilidad)
        {
            IDataReader dr = null;
            try
            {
                dr = DB.ClickSocial.ExecuteReader("cs_evento_spGetAllPerm", visibilidad);
            }
            catch (Exception ex)
            {
                throw ExceptionManager.Handle(ex);
            }
            return dr;
        }

        public long Insert(string nombre, string descripcion, int visibilidad, double precio, DateTime fecha, string fotografo, string clave)
        {
            return Convert.ToInt64(DB.ClickSocial.ExecuteScalar("cs_evento_spInsert", nombre, descripcion, visibilidad, precio, fecha, fotografo, clave));
        }

        public void Update(long eventoId, string nombre, string descripcion, int visibilidad, double precio, DateTime fecha, string fotografo, string tapa, string clave)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_evento_spUpdate", eventoId, nombre, descripcion, visibilidad, precio, fecha, fotografo, tapa, clave);
        }

        public void Delete(long eventId)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_evento_spDelete", eventId);
        } 
        #endregion

        #region Busqueda
        public IDataReader GetAllByFechaPerm(DateTime desde, DateTime hasta, int permiso)
        {
            IDataReader dr = null;
            try
            {
                dr = DB.ClickSocial.ExecuteReader("cs_evento_spGetAllByFechaPerm", desde, hasta, permiso);
            }
            catch (Exception ex)
            {
                throw ExceptionManager.Handle(ex);
            }
            return dr;
        }
        public IDataReader GetAllByNombrePerm(string nombre, int permiso)
        {
            IDataReader dr = null;
            try
            {
                dr = DB.ClickSocial.ExecuteReader("cs_evento_spGetAllByNombrePerm", nombre, permiso);
            }
            catch (Exception ex)
            {
                throw ExceptionManager.Handle(ex);
            }
            return dr;
        }
        public IDataReader GetAllByUserFotografoPerm(string userFotografo, int permiso)
        {
            IDataReader dr = null;
            try
            {
                dr = DB.ClickSocial.ExecuteReader("cs_evento_spGetAllByUserFotografoPerm", userFotografo, permiso);
            }
            catch (Exception ex)
            {
                throw ExceptionManager.Handle(ex);
            }
            return dr;
        }
        public IDataReader GetAllPerm(int permiso)
        {
            IDataReader dr = null;
            try
            {
                dr = DB.ClickSocial.ExecuteReader("cs_evento_spGetAllPerm", permiso);
            }
            catch (Exception ex)
            {
                throw ExceptionManager.Handle(ex);
            }
            return dr;
        }
        #endregion

        #region UsuarioEvento
        public IDataReader GetAllByUserEvent(string userId)
        {
            IDataReader dr = null;
            try
            {
                dr = DB.ClickSocial.ExecuteReader("cs_evento_spGetAllByUserEvent", userId);
            }
            catch (Exception ex)
            {
                Hashtable addInfo = new Hashtable();
                addInfo.Add("userId", userId);
                throw ExceptionManager.Handle(ex, "Error al recuperar eventos", addInfo);
            }
            return dr;
        }
        public void AddUserEvent(long eventoId, string userName)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_evento_user_spInsert", eventoId, userName);
        }

        public void DelUserEvent(long eventoId, string userName)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_evento_user_spDelete", eventoId, userName);
        }

        public IDataReader UsersInEvent(long eventoId)
        {
            return DB.ClickSocial.ExecuteReader("cs_evento_user_spUsersInEvent", eventoId);
        } 
        #endregion

        #region Destacados

        public void AgregarDestacado(long eventoId)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_evento_destacado_spAgregar", eventoId);
        }

        public void QuitarDestacado(long eventoId)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_evento_destacado_spQuitar", eventoId);
        }

        public void OrdenDestacado(long eventoId, int orden)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_evento_destacado_spOrden", eventoId, orden);
        }

        public IDataReader GetAllDestacados()
        {
            return DB.ClickSocial.ExecuteReader("cs_evento_destacado_spGetAll");
        }

        public IDataReader GetAllDestacadosByPerm(int visibilidad)
        {
            return DB.ClickSocial.ExecuteReader("cs_evento_destacado_spGetAllPerm", visibilidad);
        } 
        #endregion

        public void DeleteByUserEvent(string userEvent)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_evento_spDeleteByUserEvent", userEvent);
        }

        public void DeleteByUserFotografo(string userFotografo)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_evento_spDeleteByUserFotografo", userFotografo);
        }

    }
}
